/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package construtora.limiar.servlet;

import construtora.limiar.dao.ClienteDAO;
import construtora.limiar.dao.EnderecoDAO;
import construtora.limiar.dao.TelefoneClienteDAO;
import construtora.limiar.dao.TelefoneDAO;
import construtora.limiar.dao.TelefoneFuncionarioDAO;
import construtora.limiar.dao.UsuarioDAO;
import construtora.limiar.mensagens.Message;
import construtora.limiar.models.Endereco;
import construtora.limiar.models.Funcionario;
import construtora.limiar.models.Telefone;
import construtora.limiar.models.TelefoneCliente;
import construtora.limiar.models.TelefoneFuncionario;
import construtora.limiar.models.Usuario;
import construtora.limiar.models.generic.AbstractCliente;
import construtora.limiar.models.generic.AbstractModel;
import construtora.limiar.models.generic.IModel;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author michel
 */
//@WebServlet(name = "AuthSlt", urlPatterns = {"/AuthSlt"})
public abstract class AuthSlt extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected String operacao;
    protected String chave;
    //protected int id = 1;
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (getServletContext().getAttribute("funcionario") == null) {
            Message.setLastInfo("Você precisa estar autenticado para usar o recurso!");
            //response.sendRedirect("login.jsp");
            super.service(request, response);
        } else {
            super.service(request, response);
        }
    }

    public IModel trataId(HttpServletRequest request, AbstractModel model) {
        if (request.getParameter("id") != null && !request.getParameter("id").equals("null")) {
            model.setId(Integer.parseInt(request.getParameter("id")));
        }
        return model;
    }

    public void tratarErro(HttpServletResponse response, Exception e) {
        try {
            response.sendRedirect("erro.jsp?mensagem=" + e.getMessage());
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    public IModel gravarEndereco(HttpServletRequest request, AbstractModel model) {
        //Endereco endereco;
        //endereco = (Endereco) trataId(request, model);
        Endereco endereco = (Endereco) model;
        endereco.setRua(request.getParameter("rua"));
        endereco.setNumero(Integer.parseInt(request.getParameter("numero")));
        endereco.setComplemento(request.getParameter("complemento"));
        endereco.setBairro(request.getParameter("bairro"));
        endereco.setCidade(request.getParameter("cidade"));
        endereco.setEstado(request.getParameter("estado"));
        endereco.setCep(request.getParameter("cep"));
        endereco.setStatus("teste");

        EnderecoDAO dao = new EnderecoDAO();
        if (endereco.getId() == null) {
            dao.insert(endereco);
            endereco.setId(dao.getLast(endereco));
        } else {
            dao.update(endereco);
        }
        return endereco;
    }

    public IModel gravarUsuario(HttpServletRequest request, AbstractModel model) {
        Usuario usuario;
        usuario = (Usuario) trataId(request, model);

        usuario.setApelido(request.getParameter("apelido"));
        usuario.setSenha(request.getParameter("senha"));
        usuario.setEmail(request.getParameter("email"));
        usuario.setRole(request.getParameter("role"));

        UsuarioDAO dao = new UsuarioDAO();
        if (usuario.getId() == null) {
            dao.insert(usuario);
            usuario.setId(dao.getLast(usuario));
            dao.criarUsuario(usuario);
        } else {
            dao.update(usuario);
        }
        return usuario;
    }
    /*
     public IModel gravarTelefone(HttpServletRequest request, AbstractModel model){
        
     Telefone telefone; //= new Telefone();
     telefone = (Telefone) trataId(request, model);
        
     telefone.setTelefone(request.getParameter("telefone"));
     telefone.setTipo(request.getParameter("tipo"));
     telefone.setStatus("teste");
        
     TelefoneDAO dao = new TelefoneDAO();
     if(telefone.getId()==null){
     dao.insert(telefone);
     telefone.setId(dao.getLast(telefone));
     }else{
     dao.update(telefone);
     }
     return telefone;
     }
    
     protected void gravarTelefoneFuncionario(HttpServletRequest request, AbstractModel model){
     Funcionario funcionario = new Funcionario();
     funcionario.setId(model.getId());
     Telefone telefone = new Telefone();
        
     TelefoneFuncionario telefoneFuncionario = new TelefoneFuncionario();
     telefoneFuncionario.setFuncionario(funcionario);
     telefoneFuncionario.setTelefone((Telefone) gravarTelefone(request, telefone));
        
     new TelefoneFuncionarioDAO().insert(telefoneFuncionario);
        
     }
    
     protected void gravarTelefoneCliente(HttpServletRequest request, AbstractModel model){
     AbstractCliente cliente = (AbstractCliente) model;
     cliente.setId(model.getId());
     Telefone telefone = new Telefone();
        
     TelefoneCliente telefoneCliente = new TelefoneCliente();
     telefoneCliente.setCliente(cliente);
     telefoneCliente.setTelefone((Telefone) gravarTelefone(request, telefone));
        
     new TelefoneClienteDAO().insert(telefoneCliente);      
     }
    
     */

    protected IModel gravarCliente(HttpServletRequest request, IModel model) {
        AbstractCliente cliente = (AbstractCliente) model;
        Endereco endereco = new Endereco();
        Usuario usuario = new Usuario();
        cliente = (AbstractCliente) trataId(request, cliente);
        cliente.setEndereco((Endereco) gravarEndereco(request, endereco));
        cliente.setUsuario((Usuario) gravarUsuario(request, usuario));
        cliente.setStatus(request.getParameter("status"));
        cliente.setTipoTelefone(request.getParameter("tipo_telefone"));
        cliente.setTelefone(request.getParameter("numero_telefone"));

        ClienteDAO dao = new ClienteDAO();
        if (cliente.getId() == null) {
            dao.insert(cliente);
            cliente.setId(dao.getLast(cliente));
        } else {
            dao.update(cliente);
        }
        return cliente;
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
